package org.example.meetingsystem.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.meetingsystem.DTO.PaymentDTO;
import org.example.meetingsystem.DTO.ReservationRequestDTO;
import org.example.meetingsystem.entity.MeetingRoom;
import org.example.meetingsystem.entity.Reservation;
import org.example.meetingsystem.enums.ReservationStatus;

import java.time.LocalDateTime;
import java.util.List;

public interface ReservationService {

    List<Reservation> getReservationsByCustomerId(Long customerId);

    List<MeetingRoom> findAvailableRooms(LocalDateTime startTime, LocalDateTime endTime,
                                         Integer attendeeCount, Boolean needProjector,
                                         Boolean needAudio, Boolean needNetwork);

    Reservation createReservation(Long customerId, Long roomId, ReservationRequestDTO requestDTO);

    void payReservation(Long reservationId, PaymentDTO paymentDTO);

    void cancelReservation(Long reservationId, Long customerId, String reason);

    IPage<Reservation> getReservations(Page<Reservation> page, ReservationStatus status,
                                       Long roomId, Long customerId);

    List<Reservation> getTodayReservations();

    void updateReservationStatus(Long reservationId, ReservationStatus status);
}
